package arithmetic;

import java.util.Scanner;

/**
 * HJ27 查找兄弟单词
 * 知识点：
 * 1.当字符串为空时，“”.split(";").length == 1,注意单独处理，字符串为空的情况
 * 2.String.equals();
 * 3.String.compareTo();
 * 4.注意排列后的第K个单词有没有查过字符数组的长度length，在K>length的场景下，只输出length
 * 描述
 * 定义一个单词的“兄弟单词”为：交换该单词字母顺序（注：可以交换任意次），而不添加、删除、修改原有的字母就能生成的单词。
 * 兄弟单词要求和原来的单词不同。例如： ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。
 * 现在给定你 n 个单词，另外再给你一个单词 x ，让你寻找 x 的兄弟单词里，按字典序排列后的第 k 个单词是什么？
 * 注意：字典中可能有重复单词。
 *
 * 数据范围：1≤n≤1000 ，输入的字符串长度满足1≤len(str)≤10  ，1≤k<n
 * 输入描述：
 * 输入只有一行。 先输入字典中单词的个数n，再输入n个单词作为字典单词。 然后输入一个单词x 最后后输入一个整数k
 * 输出描述：
 * 第一行输出查找到x的兄弟单词的个数m 第二行输出查找到的按照字典顺序排序后的第k个兄弟单词，没有符合第k个的话则不用输出。
 * 示例1
 * 输入：
 * 3 abc bca cab abc 1
 * 复制
 * 输出：
 * 2
 * bca
 * 复制
 * 示例2
 * 输入：
 * 6 cab ad abcd cba abc bca abc 1
 * 复制
 * 输出：
 * 3
 * bca
 * 复制
 * 说明：
 * abc的兄弟单词有cab cba bca，所以输出3
 * 经字典序排列后，变为bca cab cba，所以第1个字典序兄弟单词为bca
 */
public class TestHW27 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = "";
        while(in.hasNextLine()){
            str = in.nextLine();
        }
        String[] strs = str.split(" ");
        int len = strs.length;
        int num = Integer.parseInt(strs[0]);
        String[] strs2 =  getDict(num, strs);
        String str0 = strs[len-2];
        int num2 = Integer.parseInt(strs[len-1]);
        bro(strs2, str0, num2);

    }

    public static void bro(String[] strs2, String str0, int num2){
        int index = 0;
        String str1 = "";
        while(index<strs2.length){
            String strDic = strs2[index];
            if((!strDic.equals(str0)) && (strDic.length() == str0.length())){
                String strR1 = sortChar(strDic);
                String strR2 = sortChar(str0);
                if(strR1.equals(strR2)){
                    str1+=strDic+";";
                }
            }
            index++;
        }
        //排序
        if(str1.isEmpty()){
            //注意匹配到的兄弟单词的字符串为空的场景
            System.out.println(0);
            return;
        }
        String[] str3 = str1.split(";");
        for(int i = 1; i<str3.length; i++){
            int j = i;
            String temp = "";
            while(j>0){
                if(str3[j-1].compareTo(str3[j])>0){
                    temp = str3[j-1];
                    str3[j-1]=str3[j];
                    str3[j]=temp;
                }
                j--;
            }
        }
        System.out.println(str3.length);
        if(str3.length>=num2){
            System.out.println(str3[num2-1]);
        }

    }
    //比较是否是兄弟单词
    public static String sortChar(String str){
        char[] ch = str.toCharArray();
        for(int i = 1; i<ch.length; i++){
            int j = i;
            char temp = ' ';
            while(j>0){
                if(ch[j]<ch[j-1]){
                    temp = ch[j];
                    ch[j] = ch[j-1];
                    ch[j-1]=temp;
                }
                j--;
            }
        }
        int index = 0;
        String result = "";
        while(index<ch.length){
            result+=ch[index];
            index++;
        }
        return result;
    }

    public static String[] getDict(int num, String[] strs){
        String[] strs2 = new String[num];
        int index = 1;
        while(index<=num){
            strs2[index-1] = strs[index];
            index++;
        }
        return strs2;
    }
}
